<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('internal_experiences', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联员工
            $table->unsignedBigInteger('employee_id');

            // 经历类型
            $table->string('experience_type', 20); // 类型：transfer, project, training, award, punishment

            // 基本信息
            $table->string('title', 200); // 标题
            $table->text('description')->nullable(); // 描述
            $table->date('start_date'); // 开始日期
            $table->date('end_date')->nullable(); // 结束日期
            $table->boolean('is_current')->default(false); // 是否当前在职

            // 组织架构信息
            $table->unsignedBigInteger('department_id')->nullable(); // 部门ID
            $table->string('department_name', 100)->nullable(); // 部门名称
            $table->unsignedBigInteger('position_id')->nullable(); // 岗位ID
            $table->string('position_name', 100)->nullable(); // 岗位名称
            $table->string('position_level', 50)->nullable(); // 岗位等级

            // 具体内容（根据类型不同）
            $table->text('content')->nullable(); // 具体内容

            // 培训经历相关
            $table->string('training_type', 50)->nullable(); // 培训类型
            $table->string('training_provider', 100)->nullable(); // 培训机构
            $table->decimal('training_hours', 6, 2)->nullable(); // 培训学时
            $table->string('training_result', 20)->nullable(); // 培训结果：passed, failed

            // 项目经历相关
            $table->string('project_name', 200)->nullable(); // 项目名称
            $table->string('project_role', 100)->nullable(); // 项目角色
            $table->text('project_responsibilities')->nullable(); // 项目职责
            $table->string('project_result', 20)->nullable(); // 项目结果：success, failure, ongoing

            // 奖惩记录相关
            $table->string('reward_type', 50)->nullable(); // 奖励类型
            $table->string('punishment_type', 50)->nullable(); // 处罚类型
            $table->decimal('reward_amount', 10, 2)->nullable(); // 奖励金额
            $table->text('reward_reason')->nullable(); // 奖励原因
            $table->text('punishment_reason')->nullable(); // 处罚原因

            // 调动记录相关
            $table->unsignedBigInteger('from_department_id')->nullable(); // 原部门
            $table->string('from_department_name', 100)->nullable(); // 原部门名称
            $table->unsignedBigInteger('to_department_id')->nullable(); // 新部门
            $table->string('to_department_name', 100)->nullable(); // 新部门名称
            $table->string('transfer_reason', 200)->nullable(); // 调动原因
            $table->string('transfer_type', 20)->nullable(); // 调动类型：promotion, demotion, transfer

            // 审批信息
            $table->string('approved_by', 100)->nullable(); // 审批人
            $table->date('approved_at')->nullable(); // 审批时间
            $table->text('approval_notes')->nullable(); // 审批备注

            // 附件信息
            $table->json('attachments')->nullable(); // 相关附件

            // 状态和排序
            $table->boolean('is_active')->default(true); // 是否有效
            $table->integer('sort_order')->default(0); // 排序

            // 索引
            $table->index(['employee_id']);
            $table->index(['experience_type']);
            $table->index(['start_date']);
            $table->index(['end_date']);
            $table->index(['department_id']);
            $table->index(['position_id']);
            $table->index(['is_active']);

            // 外键约束
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('internal_experiences');
    }
};
